package Java8Time;

import org.junit.Test;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.TemporalUnit;
import java.util.Set;

public class Demo1 {

    @Test
    public void test1(){
        LocalDate max = LocalDate.MAX;
        System.out.println(max);

        LocalDate now = LocalDate.now();
        System.out.println(now);

        LocalTime now1 = LocalTime.now();
        System.out.println(now1);

        LocalDateTime of = LocalDateTime.of(2021, 5, 24, 8, 20, 10);
        System.out.println(of);
    }

    @Test
    public void test2(){
        // 计算机使用的时间戳：Unix元年1970年1月1日00:00:00 开始，到某时间的毫秒值。
        Instant now = Instant.now();
        System.out.println(now); //这个输出的是那个UTC的时间，

        ZonedDateTime zonedDateTime = now.atZone(ZoneId.of(ZoneOffset.ofHours(8).getId()));
        System.out.println(zonedDateTime); //中国的时间跟UTC的相差8个时区。

        Instant instant = Instant.ofEpochSecond(1);//在元年时间起始的1秒。
        System.out.println(instant);
    }

    @Test
    public void test3(){
        //采用Duration来计算两个时间之间的间隔。
        Instant now = Instant.now();
        Instant instant = Instant.ofEpochSecond(0);
        Duration between = Duration.between(instant,now);
        System.out.println("当前时刻距离1970年1月1日0:0:0已经过去:"+between.toHours()+"个小时");
        System.out.println("当前时刻距离1970年1月1日0:0:0已经过去:"+between.toDays()+"天");
        System.out.println("当前时刻距离1970年1月1日0:0:0已经过去:"+between.toMillis()+"毫秒");
        System.out.println("当前时刻距离1970年1月1日0:0:0已经过去:"+between.toMinutes()+"分钟");


        //采用Period来计算两个日期之间的间隔
        Period period=Period.between(LocalDate.of(2002,1,1),LocalDate.now());
        System.out.println("当前时刻距离2002年1月1日已经去:"+period.getYears()+"年");
        System.out.println("当前时刻距离2002年1月1日已经去:"+period.toTotalMonths()+"个月");
    }

    @Test
    public void test4(){
        LocalDateTime now = LocalDateTime.now();
        System.out.println("当前时间:"+now);

        LocalDateTime localDateTime = now.withHour(10);
        System.out.println("将小时指定为10点:"+localDateTime);

        LocalDateTime with = now.with(TemporalAdjusters.next(DayOfWeek.SATURDAY));
        System.out.println("下一个星期六是:"+with);
    }

    @Test
    public void test5(){
        DateTimeFormatter dtf=DateTimeFormatter.ISO_LOCAL_DATE; //格式化成标准的本地日期
        LocalDateTime now = LocalDateTime.now();
        String format = dtf.format(now);
        System.out.println(format);

        DateTimeFormatter myDtf = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH点MM分ss秒"); //格式化成自定义的格式
        System.out.println(myDtf.format(now));
    }

    @Test
    public void test6(){
        Set<String> availableZoneIds = ZoneId.getAvailableZoneIds();
        // availableZoneIds.stream()
        //         .filter((zoneStr->zoneStr.contains("Asia")))
        //         .forEach(System.out::println);
        //   Asia/Shanghai  Asia/Chongqing   Asia/Harbin    Asia/Tokyo

        LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
        System.out.println(now.atZone(ZoneId.of("Asia/Shanghai")));  //上海时区


        LocalDateTime tokyoNow = LocalDateTime.now(ZoneId.of("Asia/Tokyo"));
        System.out.println(tokyoNow.atZone(ZoneId.of("Asia/Tokyo"))); //东京时区

    }
}
